package com.easpeed.elevator.otdr;
import android.util.Log;
import com.bigyu.utils.Logger;

import com.easpeed.elevator.utils.ChartUtil;

import java.util.ArrayList;
import java.util.List;

import static com.easpeed.elevator.otdr.OtdrController.hexzhuan10;

public class OTDRDataProcessor {
    private List<Double> otdrData = new ArrayList<>(); // OTDR原始数据

    // 数据处理方法
    public List<double[]> dataProcessing(int csds,OTDRSet otdrSet,String hexStr,float pointDistance,int maxDistance)  {
        otdrData.clear();
        // 提取最后一个数据点
//        disData = new ArrayList<>(); // 重置disData
//        // disData.value = disDVSData.value.map(d => d[0]) // 示例中未给出disDVSData
//        for (int i = 0; i < 40000; i++) {
//            disData.add(0d); // 或者填充其他值
//        }

        // 将16进制字符串转换为OTDR数据
        for (int i = 0; i < hexStr.length() / 4; i++) {
            String segment = hexStr.substring(i * 4, i * 4 + 4);
            double otdrD = hexzhuan10(segment) / 1000.0;
            otdrData.add(otdrD); // 调用hexToDecimal方法
//            if (i<8000 && i%10 ==0) {
//                Logger.d("sheng3","x:"+i+",s:"+segment+",otdr:"+otdrD);
//            }
        }
        Logger.d("sheng2","otdrData："+otdrData.size());

        // 计算ret
        List<double[]> ret = new ArrayList<>();
        for (int i = 0; i < otdrData.size(); i++) {
            double cur = otdrData.get(i);
            if (ret.isEmpty()) {
                ret.add(new double[]{0, cur});
            } else {
                double lastX = ret.get(ret.size() - 1)[0];
                //otdrSet.sampleRange / (double) csds 点均长，改成点间距
                ret.add(new double[]{lastX + pointDistance, cur});
            }
        }
        Logger.d("sheng2","otdrData："+ret.size());

        // 过滤ret
        List<double[]> retNew = new ArrayList<>();
        for (double[] data : ret) {
            if (data[0] <= maxDistance) {
                retNew.add(data);
            }
        }

//        // 进一步过滤
//        for (int i = retNew.size() - 1; i >= 0; i--) {
//            double[] element = retNew.get(i);
//            if (element[0] < xStart || element[0] > xEnd) {
//                retNew.remove(i);
//            }
//        }
//
//        // 按块处理数据
//        List<List<double[]>> chunks = chunkArray(retNew, (int) Math.ceil((double) retNew.size() / 1000));
//        for (List<double[]> chunk : chunks) {
//            double average = calculateAverage(chunk);
//            double lastX = chunk.get(chunk.size() - 1)[0];
//            disOTDRData.add(new double[]{lastX, average});
//        }
        Logger.d("sheng2","data processiing over："+retNew.size());
        return retNew;
    }

    // 将16进制字符串转换为十进制
    private double hexToDecimal(String hex) {
        return Integer.parseInt(hex, 16); // 可以根据需要调整为合适的转换逻辑
    }

    // 计算平均值
    private double calculateAverage(List<double[]> data) {
        double sum = 0;
        for (double[] d : data) {
            sum += d[1];
        }
        return Math.round((sum / data.size()) * 1000.0) / 1000.0; // 保留三位小数
    }

    // 将列表按指定块大小分块
    private List<List<double[]>> chunkArray(List<double[]> list, int chunkSize) {
        List<List<double[]>> chunks = new ArrayList<>();
        for (int i = 0; i < list.size(); i += chunkSize) {
            chunks.add(new ArrayList<>(list.subList(i, Math.min(i + chunkSize, list.size()))));
        }
        return chunks;
    }
}
